﻿#define _CRT_SECURE_NO_WARNINGS
#include "locale.h"
#include <Windows.h>
#include <iostream>
#include <cmath>
//#include <conio.h>
#include <time.h>
#include <sys/timeb.h>
#include <ctime>
#include <stdlib.h>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <iomanip>
using namespace std;

struct data{
	int id;
	char fio[50];
	char city[30];
	char phone[15];
	char gender;
	int zp; // зп в час
	int prog; // часы прогулов
	int otrabotal; // отработал часов
	int sum; // должен получить грн
};

data f[5];
void menu(), vvod(), vyvod(), filevyvod(), clearfile();
int exit();

int main()
{
	setlocale(LC_ALL, "Russian_Russia.1251");
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	menu();
	//system("pause");
	return 0;
}


void menu()
{
	int choice = 0;
	int	rule = 0;
	do {
		system("cls");
		cout << "\n				 1. Чтение базы данных";
		cout << "\n				 2. Заполнить или дополнить базу данных";
		cout << "\n			  	 3. Отредактировать.";
		cout << "\n				 4. Удаление.";
		cout << "\n				 5. Вывод БД в файл.";
		cout << "\n				 6. Очищение файла от данных.";
		cout << "\n				 0. Выход\n";
		cout << "\n\n*Если данные в базе уже присутствуют, то 2 пункт будет только дополнять\n\n";
		cout << "\n\nВыберите необходимое действие: ";

		do {
			cin >> choice;
			if (choice<0 || choice>6) cout << "\nТакого пункта нет, попробуйте еще раз: ";
			else rule = 1;
		} while (rule != 1);

		switch (choice)
		{
		case 1:
			//return 0;
			vyvod();
			break;
		case 2:
			//return 0;
			vvod();
			break;
		case 3:
			//return 0;
			cout << "case";
			break;
		case 4:
			//return 0;
			cout << "case";
			break;
		case 5:
			filevyvod();
			break;
		case 6:
			clearfile();
			break;
		}

	} while (choice != 0);
}


void vvod()
{
	int i = 0, ii = 0, ccend = 0;
	system("cls");

	// Проверка на введенные значения
	for (i = 0; i < 5; i++)
	{	if (f[i].id>0); else break;	}

	// Функция ввода
	for (i; i < 5; i++)
	{
			f[i].id = i + 1;
			cout << "\nЗначение №" << f[i].id << endl;
			cout << "Введите ФИО: ";
			cin.ignore(cin.rdbuf()->in_avail());  // Вот эту падлу вставлять перед каждый вводом строки. Что делает -- хуй его знает
			gets_s(f[i].fio);

			cout << "Введите Город: ";
			cin.ignore(cin.rdbuf()->in_avail());  // Вот эту падлу вставлять перед каждый вводом строки. Что делает -- хуй его знает
			gets_s(f[i].city);

			cout << "Введите Телефон: ";
			cin.ignore(cin.rdbuf()->in_avail());  // Вот эту падлу вставлять перед каждый вводом строки. Что делает -- хуй его знает
			gets_s(f[i].phone);

			cout << "Введите Пол (М или Ж): ";
			cin.ignore(cin.rdbuf()->in_avail());  // Вот эту падлу вставлять перед каждый вводом строки. Что делает -- хуй его знает
			cin >> (f[i].gender);

			cout << "Оклад (грн\\час): ";
			cin.ignore(cin.rdbuf()->in_avail());  // Вот эту падлу вставлять перед каждый вводом строки. Что делает -- хуй его знает
			cin >> f[i].zp;

			cout << "Отработаных часов: ";
			cin.ignore(cin.rdbuf()->in_avail());  // Вот эту падлу вставлять перед каждый вводом строки. Что делает -- хуй его знает
			cin >> f[i].otrabotal;

			cout << "Часов прогулов: ";
			cin.ignore(cin.rdbuf()->in_avail());  // Вот эту падлу вставлять перед каждый вводом строки. Что делает -- хуй его знает
			cin >> f[i].prog;

			cout << "Продолжить ввод? \n(1 - да, 0 - нет):";
			cin >> (ccend);

			if (ccend); else break;
		} 
}


void vyvod()
{
	int i;
	for (i = 0; i < 5; i++)
	{
		if (f[i].id == 0 && i == 0)
		{
			cout << "\n\n\nЗначения отсутствуют...\n\n\n";
			break;
		}
		if (f[i].id == 0&&i!=0)
		{
			cout << "\n\n\nДостигнут конец.\n\n\n"; 
			break;
		}
		if (f[i].id == 1 && i == 0)	cout << "\n " << setw(3) << "ID" << " | " << setw(20) << "ФИО     " << " | " << setw(5) << "Пол" << " | " << setw(15) << "Город" << " | " << setw(13) << "Телефон" << " | " << setw(6) << "Оклад"<<endl;// Шапка (если значений в БД нет, не выводится)
		
		for (int colo = 0; colo < 79; colo++) cout << "-";
		cout << "\n " << setw(3) << f[i].id << " | " << setw(20) << f[i].fio << " | " << setw(5) << f[i].gender << " | " << setw(15) << f[i].city << " | " << setw(13) << f[i].phone << " | " << setw(6) << f[i].zp <<endl;
		
	}
	system("pause");
}


void filevyvod()
{
	int i;
	ofstream F;
	time_t t;
	struct tm *t_m;
	t = time(NULL);
	t_m = localtime(&t);

	F.open("database.txt", ios::app);
	F << endl << t_m->tm_hour << ":" << t_m->tm_min << ":" << t_m->tm_sec << endl << endl;

	for (i = 0; i < 5; i++)
	{

		if (f[i].id == 1 && i == 0)	F << "\n " << setw(3) << "ID" << " | " << setw(20) << "ФИО     " << " | " << setw(5) << "Пол" << " | " << setw(15) << "Город" << " | " << setw(13) << "Телефон" << " | " << setw(6) << "Оклад"<<endl;// Шапка (если значений в БД нет, не выводится)
		for (int colo = 0; colo < 79; colo++) F << "-";
		F << "\n " << setw(3) << f[i].id << " | " << setw(20) << f[i].fio << " | " << setw(5) << f[i].gender << " | " << setw(15) << f[i].city << " | " << setw(13) << f[i].phone << " | " << setw(6) << f[i].zp << endl;
	}

	F.close();
	system("cls");
	cout << "Данные успешно внесены в файл";
}


void clearfile()
{
	ofstream F;
	F.open("database.txt", ios::trunc);
	F.close();
}